#!/usr/bin/env node

const fs = require('fs');
const path = require('path');
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

/**
 * 交互式配置向导
 */
async function setupWizard() {
    console.log('\n🧙‍♂️ Vision Analyzer 配置向导');
    console.log('═══════════════════════════════════════════════════════════════\n');
    console.log('这个向导将帮助您完成 Vision Analyzer 的初始配置。\n');

    const projectRoot = process.cwd();
    const envPath = path.join(projectRoot, '.env');
    const envExamplePath = path.join(projectRoot, '.env.example');

    // 检查.env文件是否已存在
    if (fs.existsSync(envPath)) {
        console.log('⚠️  检测到 .env 文件已存在');
        const answer = await question('是否要重新配置？(y/N): ');
        if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
            console.log('配置已取消。');
            rl.close();
            return;
        }

        // 备份现有配置
        const backupPath = path.join(projectRoot, '.env.backup.' + Date.now());
        fs.copyFileSync(envPath, backupPath);
        console.log(`✅ 已备份现有配置到: ${path.relative(projectRoot, backupPath)}`);
    }

    // 检查.env.example是否存在
    if (!fs.existsSync(envExamplePath)) {
        console.log('❌ 错误：未找到 .env.example 模板文件');
        console.log('请确保在项目根目录下运行此脚本。');
        rl.close();
        return;
    }

    console.log('\n📋 选择您的 LLM 服务商：');
    console.log('1. 🌙 Moonshot (月之暗面) - 推荐用于一般视觉分析');
    console.log('2. 🏢 腾讯混元 - 性能优秀，适合中文场景');
    console.log('3. 🧠 智谱AI - GLM-4.5v 视觉模型');
    console.log('4. 📖 手动配置所有服务商\n');

    const choice = await question('请选择 (1-4): ');

    let configContent = fs.readFileSync(envExamplePath, 'utf8');
    let selectedProviders = [];

    switch (choice.trim()) {
        case '1':
            selectedProviders = ['moonshot'];
            console.log('\n🌙 配置 Moonshot 服务商');
            const moonshotKey = await question('请输入您的 Moonshot API Key: ');
            configContent = configContent.replace('your-moonshot-api-key-here', moonshotKey);
            configContent = configContent.replace('current_provider_model=tencent', 'current_provider_model=moonshot');
            break;

        case '2':
            selectedProviders = ['tencent'];
            console.log('\n🏢 配置腾讯混元服务商');
            const tencentKey = await question('请输入您的腾讯混元 API Key: ');
            configContent = configContent.replace('your-tencent-api-key-here', tencentKey);
            // current_provider_model 已经是 tencent，无需修改
            break;

        case '3':
            selectedProviders = ['zai'];
            console.log('\n🧠 配置智谱AI服务商');
            const zhiPuKey = await question('请输入您的智谱AI API Key: ');
            configContent = configContent.replace('your-zhipu-api-key-here', zhiPuKey);
            configContent = configContent.replace('current_provider_model=tencent', 'current_provider_model=zai');
            break;

        case '4':
            console.log('\n📖 手动配置模式');
            console.log('稍后将打开 .env 文件供您手动编辑配置。\n');
            break;

        default:
            console.log('❌ 无效选择');
            rl.close();
            return;
    }

    if (choice.trim() !== '4') {
        // 移除未选择的服务商配置（注释掉）
        const allProviders = ['moonshot', 'tencent', 'zai'];
        const unusedProviders = allProviders.filter(p => !selectedProviders.includes(p));

        for (const provider of unusedProviders) {
            const regex = new RegExp(`(${provider}={[^}]+})`, 'g');
            configContent = configContent.replace(regex, '# $1 # 未配置，如需使用请取消注释并填写API密钥');
        }

        // 更新providers列表
        configContent = configContent.replace(
            'providers=["moonshot","tencent","zai"]',
            `providers=[${selectedProviders.map(p => `"${p}"`).join(',')}]`
        );

        console.log('\n💾 保存配置...');
        fs.writeFileSync(envPath, configContent);

        console.log('✅ 配置完成！');
        console.log('\n🎯 配置摘要：');
        console.log(`   • 已配置服务商: ${selectedProviders.join(', ')}`);
        console.log(`   • 当前服务商: ${selectedProviders[0]}`);
        console.log('   • 配置文件: .env\n');

        console.log('🚀 现在可以启动 Vision Analyzer：');
        console.log('   npm start\n');
    } else {
        // 手动配置模式
        fs.writeFileSync(envPath, configContent);
        console.log('✅ 已创建 .env 文件');
        console.log('\n📝 请编辑 .env 文件，填入您的 API 密钥：');
        console.log(`   ${path.relative(projectRoot, envPath)}\n`);
        console.log('配置完成后运行：npm start\n');
    }

    rl.close();
}

/**
 * 辅助函数：询问用户输入
 */
function question(query) {
    return new Promise(resolve => rl.question(query, resolve));
}

// 检查是否直接运行此脚本
if (require.main === module) {
    setupWizard().catch(error => {
        console.error('配置向导出错:', error.message);
        rl.close();
        process.exit(1);
    });
}

module.exports = { setupWizard };